логотип PurpleSchool
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • Карьерные пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
логотип PurpleSchool
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • логотип PurpleSchool
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Date: работа с датами в JavaScript

    Date: работа с датами в JavaScript

    Аватар автора Date: работа с датами в JavaScript

    Валерий Шестернин

    Иконка календаря29 августа 2023

    Работа с датами в JavaScript - важная часть разработки веб-приложений. В данной статье мы рассмотрим основные функции языка, такие как создание объектов даты, получение текущей даты и времени, форматирование значений и манипуляции с датами. Вы получите полное представление о работе с датами в JavaScript и сможете применить эти знания в своих проектах.

    Базовые операции с датами

    Создать дату в JavaScript можно с помощью конструктора Date(), который при вызове без параметров (const date = new Date()) вернет дату и время вызова в формате YYYY-MM-DDTHH:mm:ss.sssZ где YYYY-MM-DD - год, месяц и день, T - разделитель между датой и временем, HH:mm:ss.sss - часы, минут, секунды и миллисекунды, а Z - настройки временной зоны. Даты в JavaScript представлены в виде количества миллисекунд, прошедших с 1 января 1970 года по UTC поэтому новую дату можно так же создать с помощью метода .now() глобального объекта Date, который вернет количество миллисекунд до вызова.

    const date1 = new Date();
    //2023-08-29T11:30:31.224Z
    
    const date2 = Date.now();
    //1693308631228
    

    Поскольку даты содержат точное количество миллисекунд, прошедших с 1 января 1970 года по UTC разницу между ними можно использовать для замера времени между началом и окончанием выполнения какой-либо операции. Для таких целей лучше использовать метод Date.now() вместо конструктора т.к. он гораздо быстрее потому что не создает при вызове промежуточных объектов и возвращает сразу количество миллисекунд, что может быть важно при проведении большого количества замеров подряд.

    const start = Date.now();
    (function someCalcs() {
      //какие-то сложные вычисления
    })();
    console.log(`Время выполнения: ${Date.now() - start}мс`);
    

    Что бы задать конкретную дату нужно передать ее в конструктор в одном из следующих форматов:

    • Указать год, месяц, день и т.д. цифрами через запятую
    • Строка вида “ YYYY-MM-DDTHH:mm:ss.sssZ” или 'December 31, 2023 23:59:59’ фактически такой способ является неявным вызовом метода Date.parse()
    • Другой объект даты
    • Количество миллисекунд, прошедших с 1 января 1970 года по UTC

    При указании даты строкой или перечислением цифр не обязательно указывать точное до мс значение. Если не передать количество мс, секунд, минут или часов - они будут автоматически установлены на 0, дни на 1, месяца на 0 (нумерация месяцев начинается с 0). При этом год нужно передавать полностью, а не последние 2 цифры.

    Внести изменения в уже существующий объект даты, можно с помощью методов, которые имеют название .set<нужное значение> как .setDate() для дней (.getDay() вернет день недели числом от 0 до 6), .setFullYear() для года (.setYear() был удален из стандарта т.к. мог принимать не полное значение года) или .setHours() для часов. Если указать при объявлении даты или передать в один из таких методов несуществующее значение, например 20-й месяц или 25-й час - дата автоматически отформатируется и вместо 25 часов добавит к значений дней единицу, а часы установит на 1.

    Важно помнить что Date ссылочный тип данных и два объекта, содержащие одинаковые даты не будут равны друг другу при любом типе сравнения.

    const newYear1 = new Date(2023, 11, 31, 23, 59, 59, 999);
    //2023-12-31T18:59:59.999Z
    const newYear2 = new Date("2023-12-31T18:59:59.999");
    //2023-12-31T13:59:59.999Z
    const newYear3 = new Date(1704031199999); //передаем количество мс
    //2023-12-31T13:59:59.999Z
    console.log(newYear1 === newYear2); //false
    const ms = newYear1 - newYear2; //при этом разница в ms = 0
    //0
    
    newYear1.setDate(32); //устанавливаем несуществующий день в месяце
    console.log(newYear1);
    //2024-01-01T18:59:59.999Z дата подстроится под заданные параметры
    

    По аналогии с методами для изменения значений даты, существуют методы для получения части значений. Такие методы имеют название .get<нужное значение> или .getUTC<нужное значение> для получения получения значений по Гринвичу.

    const date = new Date();
    //дата и время на момент вызова
    date.getHours();
    //значение часов в месте вызова 
    date.getUTCHours()
    //значение часов по Гринвичу
    

    Работа с форматированием дат

    В JavaScript доступны методы для вывода дат в виде строки разных форматов:

    • .toString() - не принимает параметров и возвращает строку в виде: день недели (Mon), первые три буквы месяца (Aug), день (28), год (2023), время без мс (12:45:30), часовой пояс относительно UTC (GMT-0700) и название часового пояса в скобках (Pacific Daylight Time).
    • .toDateString - аналогичен .toString() , но возвращает только дату без времени.
    • .toTimeString() - аналогичен .toString(), но возвращает только время без даты.
    • .toUTCString() - аналогичен .toString(), но возвращает дату по Гринвичу.
    • .toLocalString() - принимает настройки локализации (язык и название страны) и опции (например формат отображения часов в виде 24 или am/pm) и возвращает строку в принятом в указанной стране и языке формате.
    • .toLocalDateString() - аналогичен .toLocalString(), но возвращает только дату без времени.
    • .toLocalTimeString() - аналогичен .toLocalString(), но возвращает только время без даты.
    const date = new Date(); //стандартное форматирование
    //2023-08-29T14:47:07.820Z
    console.log(date.toString()); //в строку
    //Tue Aug 29 2023 19:47:07 GMT+0500 (Yekaterinburg Standard Time)
    console.log(date.toDateString()); //только дата
    //Tue Aug 29 2023
    console.log(date.toTimeString()); //только время
    //19:47:07 GMT+0500 (Yekaterinburg Standard Time)
    console.log(date.toUTCString()); //по Гринвичу
    //Tue, 29 Aug 2023 14:47:07 GMT
    console.log(date.toLocaleString("en-US")); //англичйский США
    //8/29/2023, 7:47:07 PM
    console.log(date.toLocaleString("en-US", { hour12: false })); //то же но 24 часовой формат
    //8/29/2023, 19:47:07
    console.log(date.toLocaleDateString("de-DE")); //только дата немецкий Германия
    //29.8.2023
    console.log(date.toLocaleTimeString("ko-KR")); //только время корейский Корея
    //오후 7:47:07
    

    Date можно сериализовать в формат JSON с помощью метода .toJSON() . Конструктор конечно же прекрасно распарсит такую строку.

    const toJSON = new Date().toJSON();
    //2023-08-29T14:51:52.158Z
    const toDate = new Date(toJSON);
    //2023-08-29T14:51:52.158Z
    console.log(typeof toJSON); //string
    console.log(typeof toDate);//object
    

    Заключение

    Понимание концепций работы с датами и навык их применения позволят вам создавать более динамичные и функциональные веб-приложения на JavaScript. Не забывайте продолжать изучать и практиковать использование дат в своих проектах, чтобы стать опытным и уверенным разработчиком. Надеюсь что данная статья была полезна для понимания столь важной темы, а если вы хотите изучить основы языка или детально погрузиться в устройство JavaScript я подготовил подробные курсы.

    Иконка глаза27 544

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажеры
    Практика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    Иконка чипа0